package com.trailwalker.JavaUtils.string;

import java.util.ArrayList;
import java.util.List;

public class StringUtils {

    /**
     * 当str为空或者值为空字符串时返回true，否则返回false
     *
     * @param str
     * @return
     */
    public static boolean isEmpty(String str) {
        if (str == null || str.trim().equals("")) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 去除str中所有非数字字符，返回数字字符串，str为空时返回"0"
     *
     * @param str
     * @return
     */
    public static String getNumber(String str) {
        if (isEmpty(str)) {
            return "0";
        }
        str = removeNotNumber(str);
        if (isValid(str)) {
            return str;
        } else {
            return "0";
        }
    }

    /**
     * str不为null且存在非空字符串时，该str为有效字符串
     *
     * @param str
     * @return
     */
    public static boolean isValid(String str) {
        if (!isEmpty(str) && str.length() > 0) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 去除所有非数字字符串
     *
     * @param str
     * @return
     */
    public static String removeNotNumber(String str) {
        if (!isValid(str)) {
            return "";
        } else {
            String tmp = "";
            str = str.trim();
            for (int i = 0; i < str.length(); i++) {
                if (str.charAt(i) <= '9' && str.charAt(i) >= '0') {
                    tmp += str.charAt(i);
                }
            }
            return tmp;
        }
    }

    /**
     * 判断是否为纯数字字符串
     *
     * @param str
     * @return
     */
    public static boolean isNumber(String str) {
        if (isEmpty(str)) {
            return false;
        }
        str = str.trim();
        char[] chars = str.toCharArray();
        for (char c : chars) {
            if (c < '0' || c > '9') {
                return false;
            }
        }
        return true;
    }

    /**
     * 格式化金钱（去除尾部多余的0）
     *
     * @param money
     * @return
     */
    public static String formatMoney(String money) {
        if (money.contains(".")) {
            String reverseMoney = new StringBuilder(money).reverse().toString();
            boolean isValid = false;
            StringBuilder validMoney = new StringBuilder();
            for (int i = 0; i < reverseMoney.length(); i++) {
                if (isValid) {
                    validMoney.append(reverseMoney.charAt(i));
                } else {
                    if (reverseMoney.charAt(i) == '.') {
                        isValid = true;
                    } else if (reverseMoney.charAt(i) != '0') {
                        isValid = true;
                        validMoney.append(reverseMoney.charAt(i));
                    }
                }
            }
            return validMoney.reverse().toString();
        } else {
            return money;
        }
    }

    /**
     * 比较str1与str2，返回第一个不同字符的索引，两字符串完全相同返回-1
     *
     * @param str1
     * @param str2
     * @return
     */
    public static int compare(String str1, String str2) {
        if (str1 == null) {
            str1 = "";
        }
        if (str2 == null) {
            str2 = "";
        }
        int length = str1.length() < str2.length() ? str1.length() : str2.length();
        for (int i = 0; i < length; i++) {
            if (str1.charAt(i) != str2.charAt(i)) {
                return i;
            }
        }
        if (str1.length() == str2.length()) {
            return -1;
        } else {
            return length;
        }
    }

    /**
     * 去除字符串前后的0
     *
     * @param str
     * @return
     */
    public static String cutFrontAndLastZeroString(String str) {
        if (!isEmpty(str)) {
            str = str.trim();
            int i = str.length() - 1;
            for (; i >= 0; i--) {
                if (str.charAt(i) != '0') {
                    break;
                }
            }
            if (i == str.length() - 1) {

            } else {
                str = str.substring(0, i + 1);
            }
            i = 0;
            for (; i < str.length(); i++) {
                if (str.charAt(i) != '0') {
                    break;
                }
            }
            return str.substring(i);
        } else {
            return "";
        }
    }


    /**
     * 获取字符串中指定字符的索引列表
     *
     * @param str 源字符串
     * @param c   指定的字符
     * @return 返回索引列表
     */
    public static List<Integer> splitIndex(String str, char c) {
        List<Integer> indexList = new ArrayList<>();
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == c) {
                indexList.add(i);
            }
        }
        return indexList;
    }
}
